texthandle: Fix Y positioning of text handles
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 14 Oct 2015 15:21:25 +0000 (17:21 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 14 Oct 2015 16:44:34 +0000 (18:44 +0200)
It is assumed that border.top is the same than pointing_to.height (which
equals the strong cursor position), which is not since some time ago.

The border calculation has been move on top too, it is now used in the
Y position one, and doesn't depend on anything we calculate later.

gtk/gtktexthandle.c

index 83348874b52ce86396457d7e8aa47465326736a8..d5745665b52f259be078e59457ed3618cbdb5a50 100644 (file)
@@ -391,14 +391,17 @@ _gtk_text_handle_update (GtkTextHandle         *handle,
 
       _gtk_text_handle_ensure_widget (handle, pos);
       _gtk_text_handle_get_size (handle, &width, &height);
-      rect.x = handle_window->pointing_to.x;
-      rect.y = handle_window->pointing_to.y;
-      rect.width = width;
-      rect.height = 0;
 
+      border->top = height;
+      border->bottom = height;
       border->left = width;
       border->right = width;
 
+      rect.x = handle_window->pointing_to.x;
+      rect.y = handle_window->pointing_to.y + handle_window->pointing_to.height - handle_window->border.top;
+      rect.width = width;
+      rect.height = 0;
+
       _handle_update_child_visible (handle, pos);
 
       window = gtk_widget_get_parent (handle_window->widget);
@@ -414,9 +417,6 @@ _gtk_text_handle_update (GtkTextHandle         *handle,
                 handle_window->dir != GTK_TEXT_DIR_RTL))
         rect.x -= rect.width;
 
-      border->top = height;
-      border->bottom = height;
-
       /* The goal is to make the window 3 times as wide and high. The handle
        * will be rendered in the center, making the rest an invisible border.
        * If we hit the edge of the toplevel, we shrink the border to avoid